package com.itfenghuang.day06;

import java.util.TreeSet;

public class A04_TreeSet {
    public static void main(String[] args) {
        /**
         * 1.概述
         *      是Set集合的另外一个实现类
         *
         * 2.自然排序
         *  Comparable
         *  int compareTo(T o)将此对象与指定的对象进行比较以进行比较
         *
         * 3. HashSet特点:
         *      底层: 数据结构:哈希表
         */
        //会将容器中的数据按照一定规则进行排序
//        TreeSet<Integer> it = new TreeSet<>();
//        it.add(6);
//        it.add(2);
//        it.add(3);
//        it.add(1);
//        System.out.println(it);
//        TreeSet<String> strings = new TreeSet<>();
//        strings.add("爆爆");
//        strings.add("小小爆");
//        strings.add("起飞咯");
//        System.out.println(strings);

        //创建treeSet对象
        TreeSet<Student1> set= new TreeSet<>();
        Student1 stu1 = new Student1("爆爆", 16);
        Student1 stu2 = new Student1("大司马", 36);
        Student1 stu3 = new Student1("海王", 20);
        //向arrayList中存对象 学生对象
        set.add(stu1);
        set.add(stu2);
        set.add(stu3);
        System.out.println(set);

        //定义一个容器用来存储学生对象,按照学生的年龄进行升序操作,如果年龄相同
        //那么按照姓名的字典顺序进行排序,如果年龄和姓名都相同,我们认为是同一个人
        //不存入到容器中

    }
}
class Student1 implements  Comparable<Student1>{
    private String name;
    private int age;

    @Override
    public String toString() {
        return "Student1{" +
                "name='" + name + '\'' +
                ", age=" + age +        //向arrayList中存对象 学生对象

                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Student1() {

    }

    public Student1(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //排序方法
    @Override
    public int compareTo(Student1 o) {
        //排序规则
        //按照年龄进行升序
        //如果compareTo方法返回值是一个整数,表示当前存入的元素是一个最大值,存在右边 升序
        //如果compareTo方法返回值是一个负数,表示当前存入的元素是一个最小值,存在左边 降序
       //如果compareTo方法返回值是0,表示当前存入的元素已经存在,触发去重
        //主要条件  比较年龄
        int result=this.age-o.age;
        //次要条件  比较name
        //三元运算符
        //关系表达式  结果1 结果2
        //String 类中compareTo方法按照字符串的字母的字典顺序进行排序的
        int i = result==0? this.getName().compareTo(o.getName()):result;
        return i;

    }
}
